C'est un classic, incontournable, meme simple c'est toujours drole, on veut tous en faire un dans sa vie de programmeur
Mais toi tu sais pas faire ! Heureusement que planete-casio est là !
Je vais donner une explication physique (on étudie le mouvement dit parabolique en Term mais c'est pas trop dur à comprendre ) puis je ferai un tuto qui applique quelques points pour un programme (on peut simplifier le probleme).
Donc ne flippez pas devant les calculs!
Etude sans forces de frottements (vent, air) :
Systeme : la balle, de masse m
Referentiel : terrestre supposé galiléen
Forces :
- Le poids : P = m.g avec g dirigé vers le sol
Et oui c'est tout !
Le tir est dans un plan de l'espace donc on peut ramener toute l'étude à un plan (O,x,y)
Le vecteur acceleration a a donc pour coordonnées :
a ( 0 , -g )
Par intégration (voir en bas) on trouve le vecteur vitesse v :
v (0 + cte1 , -g * t + cte2)
les constantes sont en fait les projections du vecteur vitesse initiale sur les axes (x,y)
On a donc cte1 = Vo * cos (µ) et cte2 = Vo * sin (µ)
v ( Vo * cos (µ) , -g * t + Vo * sin (µ) )
On intégre à nouveau pour obtenir les coordonnées r de la balle en fonction du temps :
r ( Vo * cos (µ) * t + cte1 , -(1/2) * g * t^2 + Vo * sin (µ) * t + cte2 )
Ici les constantes sont en fait les coordonnées initiales de la balles (là d'ou on tire en fait), on prenra l'origine pour la suite donc cte1 = 0 = cte2
On a donc un système en fonction de t, le temps :
x = Vo * cos (µ) * t
y = -(1/2) * g * t^2 + Vo * sin (µ) * t
En posant t = x / ( Vo * cos (µ) )
Et en remplacant dans y= ... on a y en fonction de x donc on élimine le temps
y= -(1/2) * g * ( x / ( Vo * cos (µ) ) )^2 + Vo * sin (µ) * ( x / ( Vo * cos (µ) ) )
y = - ( g * x^2 ) / ( 2 * Vo^2 * cos (µ)^2 ) + x * tan (µ)
Bon ceci est l'approche physique telle que vous la verrez en Term
Pour la programmation d'un jeu de tir il nous suffit de voir comment se deplace la balle.
- Elle part de Xo,Yo à Vo avec un angle µ.
- au cours du mouvement la gravité agit sur la balle
Donc en fait il suffit de projeter le vecteur vitesse initial sur x,y pour obtenir les coordonnées de la balle à la date t1, t2 etc
depX = Vo * cos (µ)
depY = Vo * sin (µ)
donc considérons une boucle de tir :
?A
?F
Fcos AU
Fsin AV
0C~D
Do
C+UC
D+VD
Lpwhile...
On va avoir un tir "droit" à l'infini.
En ajoutant la gravité :
?A
?F
?G
Fcos AU
Fsin AV
0C~D
Do
C+UC
D+VD
V-GV
Lpwhile...
Et voila une belle parabole
Note : attention, utilisez une valeur tres faible pour la gravité du genre 0.3 au début
Si on ajoute le vent :
?A
?F
?G
?W
Fcos AU
Fsin AV
0C~D
Do
C+UC
D+VD
V-GV
U+WU
Lpwhile...
Faites des essais c'est marrant de voir la balle revenir avec le vent
Intégration :
Le contraire de la dérivation, elle sert pour les calculs d'intégrales (calcul de l'aire délimité par Y=0 et une courbe sur un intervalle par exemple)
Dans la calculatrice, le signe intégrale est un grand S().
S(1) = x + cte (rappelez vous que diff(cte) = 0 )
S(cte) = cte * x + cte2
S(x) = (x^2)/2 (en effet diff((x^2)/2) = 2 * (1/2) * x' * x = x )
ViewWindow 1,127,0,1,63,0
"RAYON"?r
"COORD DU CENTRE EN X"?U
"COORD DU CENTRE EN Y"?V
0A
rB
r-1M
Do
PlotOn A+U,B+V
PlotOn B+U,A+V
PlotOn -A+U,B+V
PlotOn -B+U,A+V
PlotOn A+U,-B+V
PlotOn B+U,-A+V
PlotOn -A+U,-B+V
PlotOn -B+U,-A+V
If M2A
Then M-2A-1M
A+1A
Else If M2(r-B
Then M+2B-1M
B-1B
Else M+2(B-A-1M
B-1B
A+1A
IfEnd
IfEnd
LpWhile BA
----------------------------------
L1 Math-Informatique à l'université Paul-Verlaine (Metz)
Javierxd Hors ligne Membre Niveau: Confirmé
Points: 1236
Défis: 8 Email | Message
Planète-Casio est un site communautaire indépendant et n'est donc pas affilié à Casio | Toute reproduction de Planète-Casio, même partielle, est interdite
Les fichiers, programmes et publications postés sur Planète-Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des copyrights
Merci de respecter le travail des autres ! | CASIO est une marque déposée par CASIO Computer Co., Ltd